package proyecto2.src.entidades;

import javax.swing.ImageIcon;

import proyecto2.src.aplicacion.Nivel;
import proyecto2.src.armas.BombaDevastadora;
import proyecto2.src.armas.laser;


public abstract class Principal extends nave{
	//atributos
	private static final int maxPuntosVida=3;
	protected int vida;
	protected BombaDevastadora bombaD;
	protected boolean invulnerabilidad;
	protected laser laser;


	public Principal(int velocidad, ImageIcon ref,Nivel nivel,int puntosVida) {
		super(nivel,velocidad, ref,puntosVida);
		vida=maxPuntosVida;
		bombaD= new BombaDevastadora(nivel);
		invulnerabilidad=false;
		laser= new laser(nivel);
	}

	//Comandos
	public void muerte(){	
		nivel.eliminarNavePrincipal();
	}

	public void disparar(int op) {
		switch (op){
		case 1: {
			dispararArmaPrincipal();
			break;
		}
		case 2: {
			dispararArmaSecundaria();
			break;
		}
		case 3: {
			activarHabilidadEspecial();
			break;
		}
		case 4: {
			activarBombaDevastadora();
			break;
		}
		}

	}
	
	private void activarBombaDevastadora() {
		bombaD.disparar(this.getLocation());
	}

	protected abstract void activarHabilidadEspecial() ;

	protected abstract void dispararArmaSecundaria() ;

	protected abstract void dispararArmaPrincipal();

	public void RecibirChoque(Enemiga e){
		if(!invulnerabilidad){
			reducirPuntosVida(e.getPuntosDeVida());			
			if (puntosDeVida<=0) {
				perderunaVida();
			}
			if (vida == 0) {
				muerte();
			};
		}
	}

	public void invulnerable(boolean opcion){
		invulnerabilidad=opcion;
	}


	private void perderunaVida(){
		vida--;
		puntosDeVida=maxPuntosVida;		
		nivel.inicializarPosicion();
		nivel.getVidasPrincipal().setText("Vidas: "+vida);
	}

	private void reducirPuntosVida(int danio){
		puntosDeVida-=danio;		
	}

	public int getVida(){
		return vida;
	}

	public void recibirDisparo(int dano){	
		if(!invulnerabilidad){
			reducirPuntosVida(dano);		
			if (puntosDeVida<=0) {
				perderunaVida();
			}
			if (vida == 0) {
				muerte();
			}
		}
	}
}
